/*
* 作者:蘇文宏
* 學號:8324057
* 本程式,建議使用 jdk 1.0x 編譯執行
* 如使用 jdk 1.1.x 版編譯,則會有『1 warning』出現,
* 放心這是正常現象
*/
import java.applet.*;
import java.awt.*;
import java.util.*;
// 框架視窗類別,就是有最大化、最小化…的框框
final class MyFrame2 extends Frame{
static int frameNumber=0;// 計錄總數
static int frameIndex=0;// 框架索引
public MyFrame2(String str){
super(str+" - "+ ++frameIndex);// 標題是第 frameIndex 個框架視窗
frameNumber++;
}
public boolean handleEvent(Event evt){
if(evt.id==Event.WINDOW_DESTROY){// 如果按下了『視窗關閉』
if(--frameNumber==0){// 如果全部都結束了
dispose();
System.exit(0);// 離開 java 虛擬機器
}
else
dispose();// 關閉框架視窗
}
return super.handleEvent(evt);// 丟給父類別處理
}
}//end of class MyFrame2
// 放 awt 元件的容器
final class MyPanel2 extends Panel{
final static int TEXT_STRING_LENGTH=30;// 輸入算式最大字元數
final static int TEXT_FIELD_NUMBER=3;// 一個輸出後序,一個輸出數值,一個輸入
final static int POSTFIX=0;// 定義常數,代表後序運算式
public final static int ANSWER=1;// 定義常數,代表輸出
public final static int INPUT=2;// 定義常數,代表輸入
final static int DEGREE=0;// 定義常數,代表度數
final static int RADIAN=1;// 定義常數,代表弳度量
final static String AC="Ac";// 定義『清除鍵』
final static String EXEC="Exec";// 定義『執行鍵』
Evaluate ev;
String[] pad;
Panel panelSmall;
Panel panelBig;
Label[] label;
Button btnPad[];
TextField[] textField;
TextField x;
Checkbox[] chkBox;
Button newWindowBtn;
// 初使化,按鍵、文字區、標題……等
public MyPanel2(){
int i;// 迴圈專用變數
Font font=new Font("",Font.PLAIN,16);
setBackground(Color.lightGray);
setFont(font);
// 設定鍵盤
i=0;
ev=new Evaluate();
String SPACE=" ";
String[] pad={// 鍵盤按鍵
ev.functionTable[i++].name+SPACE,ev.functionTable[i++].name+SPACE,ev.functionTable[i++].name+SPACE,ev.functionTable[i++].name+SPACE,
ev.functionTable[i++].name+SPACE,ev.functionTable[i++].name+SPACE,ev.functionTable[i++].name+SPACE,ev.functionTable[i++].name+SPACE,
ev.functionTable[i++].name+SPACE," ^2 ",SPACE+ev.functionTable[i++].name+SPACE,ev.functionTable[i++].name+SPACE,
ev.functionTable[i++].name+SPACE," ^-1 ",ev.functionTable[i++].name+SPACE,ev.functionTable[i++].name+SPACE,
"(",")",SPACE+ev.functionTable[i++].name+SPACE,AC,
"7","8","9",SPACE+ev.functionTable[i++].name+SPACE,
"4","5","6",SPACE+ev.functionTable[i++].name+SPACE,
"1","2","3",SPACE+ev.functionTable[i++].name+SPACE,
"0",".",SPACE+ev.functionTable[i++].name+SPACE,EXEC
};
// 這一段,設定標題,輸出入文字欄
//postfix [ ]
//answer [ ]
//input [ ]
textField=new TextField[TEXT_FIELD_NUMBER];
textField[POSTFIX]=new TextField(TEXT_STRING_LENGTH);
textField[ANSWER]=new TextField(TEXT_STRING_LENGTH);
textField[INPUT]=new TextField(TEXT_STRING_LENGTH);
GridBagLayout gridBag=new GridBagLayout();
GridBagConstraints c= new GridBagConstraints();
panelSmall=new Panel();
panelSmall.setLayout(gridBag);
Label lb;
c.fill=GridBagConstraints.BOTH;
lb=new Label("Author : Wen-Hung Su",Label.CENTER);
c.gridwidth=GridBagConstraints.REMAINDER;
gridBag.setConstraints(lb,c);
panelSmall.add(lb);
lb.setForeground(Color.blue);
lb=new Label("E-mail : b8324057@student.nsysu.edu.tw",Label.CENTER);
gridBag.setConstraints(lb,c);
panelSmall.add(lb);
lb.setForeground(Color.blue);
lb=new Label("postfix");
c.weightx=1.0;
c.gridwidth=1;
gridBag.setConstraints(lb,c);
panelSmall.add(lb);
c.weightx=3.0;
c.gridwidth=GridBagConstraints.REMAINDER;
gridBag.setConstraints(textField[POSTFIX],c);
panelSmall.add(textField[POSTFIX]);
textField[POSTFIX].setEditable(false);// 設定成不可修改
lb=new Label("answer");
c.weightx=1.0;
c.gridwidth=1;
gridBag.setConstraints(lb,c);
panelSmall.add(lb);
c.weightx=3.0;
c.gridwidth=GridBagConstraints.REMAINDER;
gridBag.setConstraints(textField[ANSWER],c);
panelSmall.add(textField[ANSWER]);
textField[ANSWER].setEditable(false);// 設定成不可修改
lb=new Label("input");
c.weightx=1.0;
c.gridwidth=1;
gridBag.setConstraints(lb,c);
panelSmall.add(lb);
c.weightx=1.0;
c.gridwidth=GridBagConstraints.REMAINDER;
gridBag.setConstraints(textField[INPUT],c);
panelSmall.add(textField[INPUT]);
// 這一段,設定 x=[0 ] ○degree ☉radian
chkBox=new Checkbox[2];
CheckboxGroup chkGroup=new CheckboxGroup();
chkBox[DEGREE]=new Checkbox("degree",chkGroup,false);
chkBox[RADIAN]=new Checkbox("radian",chkGroup,true);
c.weightx=0.3;
c.gridwidth=1;
lb=new Label("x=");
gridBag.setConstraints(lb,c);
panelSmall.add(lb);
c.weightx=1.0;
x=new TextField("0",10);
gridBag.setConstraints(x,c);
panelSmall.add(x);
gridBag.setConstraints(chkBox[DEGREE],c);
panelSmall.add(chkBox[DEGREE]);
c.gridwidth=GridBagConstraints.REMAINDER;
gridBag.setConstraints(chkBox[RADIAN],c);
panelSmall.add(chkBox[RADIAN]);
// 這一段,設定數字及函數按鍵
btnPad=new Button[pad.length];
panelBig=new Panel();
for(i=0;i<20;i++){
panelBig.add(btnPad[i]=new Button(pad[i]));
btnPad[i].setBackground(Color.green);
}
for(;inumStack.size())//new
SyntaxError(token);
if(op!=null){
for(i=0;i 後序運算式
public void analysis(){
int StringIndex,temp,precede=NOT_NUMBER;
int thisLeval=0,saveLastPriority=LEVAL8;
char ch;
Stack opStack=stack;
opStack.removeAllElements();//clear stack
String token;
StringBuffer sbuffer=new StringBuffer();
EvaluateData op,opMul=(EvaluateData)hash.get("*");
for(StringIndex=0;StringIndex